package Enea.project;

import java.net.SocketAddress;

/**
* Questa classe rappresenta le informazioni sui Client connessi al Server Enea.
*
* @author Davide aversa
* @version 0.1
*/
public class ClientData {

    private long clientid;
    private long cpuclock;
    private int cpunumber;
    private ClientStats stats;
    private WorkUnit wu;
    private SocketAddress address;
    private static long lastclient = 0;

    /**
    * Il costruttore della classe ClientData. Attribuisce automaticamente un
    * numero incrementale univoco per ogni client.
    */
    public ClientData(long cpuclock, int cpunumber) { 
        this.clientid = ClientData.lastclient++;
        this.stats = null;
        this.cpuclock = cpuclock;
        this.cpunumber = cpunumber;
    }

    public SocketAddress getAddress() {
        return address;
    }

    public void setAddress(SocketAddress address) {
        this.address = address;
    }

    public WorkUnit getWu() {
        return wu;
    }

    public void setWu(WorkUnit wu) {
        this.wu = wu;
    }

    /**
     * Getter per la variabile ClientID.
     * 
     * @return L'ID del client.
     */
    public long getClientid() {
        return clientid;
    }

    /**
     * Getter per la variabile CPUClock.
     * 
     * @return Il clock del cpu del client.
     */
    public long getCpuclock() {
        return cpuclock;
    }

    /**
     * Getter di CPUNumber.
     * 
     * @return Il numero di CPU del client.
     */
    public int getCpunumber() {
        return cpunumber;
    }

    /**
     * Getter per la variabile stats.
     * 
     * @return Il pacchetto di statistiche locali associate al client.
     */
    public ClientStats getStats() {
        return stats;
    }

    /**
     * Setter per l'aggiornamento del pacchetto di statistiche.
     * 
     * @param stats Il nuovo pacchetto di statistiche associato al client.
     */
    public void setStats(ClientStats stats) {
        this.stats = stats;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final ClientData other = (ClientData) obj;
        if (this.clientid != other.clientid) {
            return false;
        }
        return true;
    }

    @Override
    public int hashCode() {
        int hash = 7;
        hash = 37 * hash + (int) (this.clientid ^ (this.clientid >>> 32));
        return hash;
    }
    
}